import axios from 'axios';

// 新建axios对象
const httpClient = axios.create({
    // 验证合法响应状态码
    validateStatus(status) {
        return status >= 200 && status <= 504 // 若不合法，则不会接收response
    },
    timeout: 10000 // 超时时间10秒
})

httpClient.defaults.retry = 3 // 重试3次
httpClient.defaults.retryDelay = 1000 // 重试时间间隔为1秒
httpClient.defaults.shouldRetry = true // 是否重试

// 添加请求拦截器
httpClient.interceptors.request.use(
    config => {
        // 添加header
        // config.headers['Content-Type'] = 'application/json'  // 注释，开启会导致上传文件被重写请求头
        config.headers['Accept-Language'] = 'zh-CN'

        // 关键修复：添加 Bearer 前缀
        const token = localStorage.getItem('token');
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`; // 这里添加了Bearer和空格
        }

        if (config.method === 'post') {
            if (!config.data) { // 没有参数时，config.data为null，需要转下类型
                config.data = {};
            }
        }
        return config;
    },
    err => {
        return Promise.reject(err); // 补充return
    }
)

// // 添加响应拦截器
httpClient.interceptors.response.use(
    response => {
        if (response.status !== 200) {
            return Promise.reject(response.data);
        } else {
            return response.data;
        }
    },
    err => {
        return Promise.reject(err);
    }
)

// 完整修改后的响应拦截器
// httpClient.interceptors.response.use(
//     response => {
//         // 1. 处理 HTTP 状态码非200的情况
//         if (response.status !== 200) {
//             const error = new Error(`HTTP错误：${response.status}`);
//             error.msg = `HTTP错误：${response.status}`; // 显式加 msg
//             error.data = response.data;
//             return Promise.reject(error);
//         }
//
//         // 2. 处理后端业务错误（code≠0）
//         const resData = response.data;
//         if (resData.code !== 0) {
//             const error = new Error();
//             error.code = resData.code; // 保留错误码
//             error.msg = resData.msg || '服务器返回业务错误'; // 显式绑定后端的 msg
//             error.data = resData; // 保留完整响应数据
//             return Promise.reject(error); // 抛出错误，进入前端 catch
//         }
//
//         // 3. 成功情况：返回数据
//         return resData;
//     },
//     err => {
//         // 处理网络错误、超时等情况
//         err.msg = err.message || '网络异常或请求超时'; // 显式加 msg
//         return Promise.reject(err);
//     }
// );

// httpClient.interceptors.response.use(
//     response => {
//         // 1. 处理 HTTP 状态码非200的情况
//         if (response.status !== 200) {
//             const error = new Error();
//             // 优先使用后端返回的msg，否则用状态码描述
//             error.msg = response.data?.msg || `HTTP错误：${response.status}`;
//             error.code = response.data?.code || response.status; // 保留错误码
//             error.data = response.data; // 保留完整响应数据
//             return Promise.reject(error);
//         }
//
//         // 2. 处理后端业务错误（code≠0）
//         const resData = response.data;
//         if (resData.code !== 0) {
//             const error = new Error();
//             error.code = resData.code;
//             error.msg = resData.msg || '服务器返回业务错误';
//             error.data = resData;
//             return Promise.reject(error);
//         }
//
//         // 3. 成功情况：返回数据
//         return resData;
//     },
//     err => {
//         // 处理网络错误、超时等情况
//         err.msg = err.message || '网络异常或请求超时';
//         return Promise.reject(err);
//     }
// );

// export出去
export default httpClient
